このページは私用WordPressの覚え書き兼、テストページです。
「SNSボタン」は、テスト検証用に仮設置しているだけなので、押しても反応しません。

014_2カスタム投稿の「カテゴリー」と「タグ」を表示するようにする

「カスタム投稿」を作るにプラス、覚書メモ


「通常投稿」には、「カテゴリー」と「タグ」の仕様が標準についてますが、
自作で「カスタム投稿」を作った場合は、自分で定義を追加しないと「カテゴリー」も「タグ」も使えるようにはなっていないです。

いちいち設定しないと「存在しない」というのはなにかと不便ですが、これも wordpress の仕組みを理解する上でも大事なことかな、と思って設定したいと思います。


「カテゴリー」「タグ」も、実は「タクソノミー」

調べてみると、
どうやら「カテゴリー」と「タグ」は、両方とも同じ「タクソノミー(訳すと=分類)」という言葉で定義するようです。

設定では 'hierarchical' という部分を true にするか、false にするか、の違いだけのようです。

trueだと=カテゴリー になり、
false だと=タグ になります。


「カスタム投稿」に「カテゴリー」と「タグ」を設定する

functions.php に下記を追記します

もちろん、「カスタム投稿」を複数作った場合は、それぞれに設定が必要です。
下記↓はひとつ分です。(一例として「イラスト」のカスタム投稿)

    //カテゴリータイプ
    $args = array(
        'label' => 'カテゴリー',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true
    );
    register_taxonomy('illust_category','illust',$args);
     //タグタイプ
    $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false
    );
    register_taxonomy('illust_tag','illust',$args);


実際に追記したのが下記です。(functions.php に追記する)

(26行目~41行目)
   ↓

<?php
//カスタム投稿生成
add_action('init', 'my_custom_post_type'); //WordPressの読み込みが完了し、ヘッダーが送信される前にmy_custom_post_typeをフック
function my_custom_post_type() {

    $labels = array(
        'name' => 'イラスト', //投稿タイプの一般名
        'add_new_item' => '新規イラストを追加',
        'not_found' =>  __('イラストは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいイラスト'), //編集画面のタイトル
        'view_item' => __('イラストを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('illust',$args); //カスタム投稿タイプとその動作を定義する設定名(single.phpに追加する名前でもある)
    //カテゴリータイプ
    $args = array(
        'label' => 'カテゴリー',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => true
    );
    register_taxonomy('illust_category','illust',$args);
     //タグタイプ
    $args = array(
        'label' => 'タグ',
        'public' => true,
        'show_ui' => true,
        'hierarchical' => false
    );
    register_taxonomy('illust_tag','illust',$args);




    $labels = array(
        'name' => 'comic', //投稿タイプの一般名

//以下略

}
?>

作った「カスタム投稿」の数分だけ追記します。


パーマリンクを空更新

カスタム投稿を作った時と同じく
functions.php に追記して保存した後、メニュー → 設定 → パーマリンクを、空更新しておきました。


記事を投稿してみる

これで、管理画面上で、「カスタム投稿」の「カテゴリー(と表示名をつけたタクソノミー)」と、同じく「タグ(と表示名をつけたタクソノミー)」ができました。
さっそく記事を投稿して、試しにタグを入力してみたいと思います。

入力したものの、プレビューしても出てこない

しかし、タグを入力後、プレビューしてみても、タグが表示されません・・・

これは、テンプレート(single-xxx.php)の中に、「タクソノミーを表示する」というコードを、まだ書いてないからです。


「カスタム投稿」の「カテゴリー」と「タグ」を出力させるには

いろいろぐぐって、試してみた結果、
下記のように書けば、「カテゴリー(タクソノミー)」と「タグ(同じくタクソノミー)」の文字が表示できるようになりました。

1~6行目が「カテゴリー」、7~12行目が「タグ」)
    ↓

<?php
$taxolist = get_the_term_list( $post->ID, 'illust_category', 'カテゴリー:', '、', '' );
if($taxolist):
?>
<dd><?php echo $taxolist; ?></dd>
<?php endif; ?>
<?php
$taxolist2 = get_the_term_list( $post->ID, 'illust_tag', 'タグ:', '、','' );
if($taxolist2):
?>
<dd><?php echo $taxolist2; ?></dd>
<?php endif; ?>


「出力結果」は、

  ↓

カテゴリー:食べ歩き タグ:ラーメン味噌市ヶ谷
のようになります。
(見た目のデザインは、スタイル定義によって変わります)


上記のコードは、出力したい部分例えば:single-llust.phparchive-illust.php など)に記述します。


014_1カスタム投稿を作る

「カスタム投稿」を作る覚書メモ


「カスタム投稿」とは

「カスタム投稿」とは、「通常投稿」とは別の新たな投稿枠の事です。

自作テーマを作るにあたって、最初は、それぞれのコンテンツ(「小説」「イラスト」「漫画」など)を、カテゴリーで分けるくらいしか考えてなかったのですが、

WordPress には「通常の投稿」、「更新しない固定ページ」の他に、もうひとつ「カスタム投稿」というのを作ることが出来るという事を知りました。

「カスタム投稿」を作ると、「通常の投稿」の他に、新たにメニュー項目に追加され、「通常の投稿」と完全に分離できます。


「カスタム投稿」を新規設定するには

デフォルトの WoredPress では「カスタム投稿」は、すぐに作れるようにはなっていません。
カスタム投稿」を作るには、「手動で functions.php というのを作ってコードを書いて設定する方法」と「プラグインを入れて設定する方法」の二種類の方法があるようです。

作業的には、おそらく「プラグイン」を使った方が楽だろうと思うのですが、それだと覚えられない、というか、WoredPress の仕組みを学ぶためには、プラグインではなく「手動でfunctions.php にコードを書く方法」方法をとりたいと思います。


functions.php に下記を追記する

6~25行目ひとつぶんです)
7~11行目の ' ' のところを自分の作りたい投稿名に書き換えます)
25行目の ' ' のところは欧文にします。大文字はダメみたいです)
23行目の 'supports' の array(' ') のところは、必要なものを入れます。

(詳しくは → ●WordPress日本語Codex「関数リファレンス」)を見てください。

<?php
//カスタム投稿生成
add_action('init', 'my_custom_post_type'); //WordPressの読み込みが完了し、ヘッダーが送信される前にmy_custom_post_typeをフック
function my_custom_post_type() {

    $labels = array(
        'name' => 'イラスト', //投稿タイプの一般名
        'add_new_item' => '新規イラストを追加',
        'not_found' =>  __('イラストは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいイラスト'), //編集画面のタイトル
        'view_item' => __('イラストを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('illust',$args); //カスタム投稿タイプとその動作を定義(single.phpに追加する名前)



    $labels = array(
        'name' => 'comic', //投稿タイプの一般名
        'add_new_item' => '新規comicを追加',
        'not_found' =>  __('comicは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいcomic'), //編集画面のタイトル
        'view_item' => __('comicを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('comic',$args); //カスタム投稿タイプとその動作を定義(single.phpに追加する名前)



    $labels = array(
        'name' => 'お絵かきまとめ', //投稿タイプの一般名
        'add_new_item' => '新規お絵かきまとめを追加',
        'not_found' =>  __('お絵かきまとめは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト
        'new_item' => __('新しいお絵かきまとめ'), //編集画面のタイトル
        'view_item' => __('お絵かきまとめを表示') //記事編集画面の「プレビュー」のテキスト
    );
    $args = array(
        'labels' => $labels, //この投稿タイプのラベルの配列
        'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数
        'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか
        'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか
        'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか
        'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post"
        'rewrite' => true, //このフォーマットでパーマリンクをリライトする
        'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか
        'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置
        'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス
    );
    register_post_type('oekaki',$args); //カスタム投稿タイプとその動作を定義(single.phpに追加する名前)


}
?>


'title'=記事タイトル ※必須(デフォルト)
'editor'=本文投稿部分 ※必須(デフォルト)
'thumbnail'=サムネイル(アイキャッチ画像を使用したい時)
'excerpt'=抜粋(本文の抜粋を利用できます)
'comments'=コメントフォーム(入れないとコメントフォームが出てきません)
'trackbacks'=トラックバック(同じく)
を選びました。(後で変えたりするかも)


設定した後は「パーマリンクの設定」を空更新

この functions.php をテーマフォルダに保存したら、管理画面の「設定」→「パーマリンクの設定」を空更新します。

※この空更新をしないと「ページがありません」のようになって、functions.php が認識されないそうです。


ダッシュボードに「メニュー」として追加される

自作テーマでは「イラスト」「comic」「お絵かきまとめ」のカスタム投稿を作成してみました。
こんな感じになります。
   ↓


カスタムでつけた名前とテンプレートファイルとの関連性

25行目 の ' ' の欧文表記名ですが、
普通は、自動的に single.php のテンプレートを使ってくれるのだそうですが、
25行目でつけた名前を single.php のファイル名に追加すると、
(「イラスト」なら、single-illust.php、「SS」なら single-ss.php、などのように) そのテンプレートを優先して使ってくれるのだそうです。
(つまり、カスタム投稿ごとに個別のレイアウトにする事ができます)


これは、すごい便利ですね!